home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / ietf / urn / urn-archives / urn-ietf.archive.9608 / 000007_owner-urn-ietf _Tue Aug 13 02:29:19 1996.msg < prev    next >
Internet Message Format  |  1997-02-19  |  31KB

  1. Received: (from daemon@localhost) by services.bunyip.com (8.6.10/8.6.9) id CAA09508 for urn-ietf-out; Tue, 13 Aug 1996 02:29:19 -0400
  2. Received: from mocha.bunyip.com (mocha.Bunyip.Com [192.197.208.1]) by services.bunyip.com (8.6.10/8.6.9) with SMTP id CAA09501 for <urn-ietf@services.bunyip.com>; Tue, 13 Aug 1996 02:29:13 -0400
  3. Received: from mintaka.lcs.mit.edu by mocha.bunyip.com with SMTP (5.65a/IDA-1.4.2b/CC-Guru-2b)
  4.         id AA08711  (mail destined for urn-ietf@services.bunyip.com); Tue, 13 Aug 96 02:29:07 -0400
  5. Received: from skadhwe.lcs.mit.edu by MINTAKA.LCS.MIT.EDU id aa23324;
  6.           13 Aug 96 2:28 EDT
  7. Received: by skadhwe.lcs.mit.edu; (5.65/1.1.8.2/15Aug95-0306PM)
  8.     id AA03241; Tue, 13 Aug 1996 02:28:54 -0400
  9. Date: Tue, 13 Aug 1996 02:28:54 -0400
  10. Message-Id: <9608130628.AA03241@skadhwe.lcs.mit.edu>
  11. From: Lewis Girod <girod@LCS.MIT.EDU>
  12. To: rdaniel@acl.lanl.gov
  13. Cc: urn-ietf@bunyip.com
  14. In-Reply-To: <2.2.32.19960802212958.006cb04c@acl.lanl.gov> (message from Ron
  15.     Daniel on Fri, 02 Aug 1996 15:29:58 -0600)
  16. Subject: Re: [URN] nasty rewriting rules
  17. Sender: owner-urn-ietf@services.bunyip.com
  18. Precedence: bulk
  19. Reply-To: Lewis Girod <girod@LCS.MIT.EDU>
  20. Errors-To: owner-urn-ietf@bunyip.com
  21.  
  22. ******** NOTE: ********
  23. *
  24. *  This reply is written in reference to the document and code at
  25. *
  26. *    http://ana-www.lcs.mit.edu/people/girod/translator.c  (~40K)
  27. *
  28. *  The file is mostly document, and explains in great detail with examples the
  29. *  proposal discussed in this reply.
  30. *
  31. ***********************
  32.  
  33.    On Fri, 02 Aug 1996 15:29:58 -0600, Ron Daniel <rdaniel@acl.lanl.gov> wrote:
  34.  
  35.    So, what *do* we want to avoid about regexps? [...] You said that your 
  36.    primary objection to them was that adopting them now might prevent future
  37.    resolution systems that are not also based on general rewrite rules. With
  38.    respect, I think that reason is a red herring. 
  39.  
  40. A1. What do we need to fix about Regexps?
  41.  
  42. I didn't spend a lot of time explaining this clearly in the original
  43. proposal document, so I will summarize what I thought should be fixed:
  44.  
  45. (1) We should enable specific namespace schemes to be enforceable.  I
  46. think this is a better way of putting what I had said originally,
  47. i.e. preventing future name schemes from being contorted.  While I
  48. agree that it would be a patently bad idea to _specify_ a contorted
  49. name scheme, with regexp rules at the basis of a resolution system the
  50. whole idea of a name scheme specification no longer applies.  At any
  51. level of delegation some part of a URN is likely to be essentially
  52. opaque, and lower levels really can't be stopped from varying from the
  53. intended scheme.  This can be seen as a bug or a feature; I consider
  54. it a bug.  To me it is better to explicitly define a scheme and
  55. relegate things that do not fit to other schemes (see discussion in
  56. below in sections A4.1 and A3).  You mentioned that one difficulty
  57. might be ``constructed OIDs'', which I am not familiar with...  I
  58. would suspect that these could be just as easily constructed into a
  59. different name scheme (perhaps by prepending URN:oid-xyz: or
  60. something) rather than changing the previously defined format of OIDs.
  61. Further, part of this problem is caused by the present lack of a
  62. resolution system; once one exists people will make namespaces that
  63. fit it.  How are constructed OIDs currently used and resolved?
  64.  
  65. (2) We should simplify the construction of maintenance interfaces.
  66. Maintainers need to understand what is going on with the system and
  67. need to keep the rules working as new functionality is added to them.
  68. It would be nice if this can be done with a simple interface which
  69. could display the data in an easy to follow manner and which provides
  70. static and end-to-end checks to ensure that the system is working.
  71. Such an interface is sketched out below in section A2.  The regexps
  72. are hard to follow and at each stage the whole string has to be
  73. processed to figure out what part is relevant.  This makes them harder
  74. to fit into an interface.
  75.  
  76. (3) We should try to keep the bulk of the data in a format that is
  77. easily convertible in the future.  This might be a feature of the
  78. maintainance interface, since the maintenance interface could keep the
  79. data in a canonical form which is then compiled into rules (see
  80. section A2.3).  It seems to me that this sort of processing is much more
  81. difficult to do with regexps than with a simpler rule language.  But
  82. to the degree that name scheme hierarchy can be specified (depending
  83. on the details of each specific scheme) it may be possible to have a
  84. single canonical data format for an entire name scheme.
  85.  
  86. (4) Regexp interpreters are hard to implement if they are not already
  87. available on the target system, whereas the languages in my proposal
  88. have been implemented quite easily.
  89.  
  90.    Currently, there are a variety of naming schemes in existence that I
  91.    would like to be able to resolve as URNs. (ISBNs, OIDs, FPIs, etc). 
  92.    The structure of those names is already set, and the ability of future
  93.    systems to crack that structure is not affected by what we allow in NAPTRs.
  94.  
  95. There are two questions here.  First, this statement is only true
  96. given that the structure of the name scheme actually remains
  97. consistent with this set stucture in the context of NAPTR (this gets
  98. back to point (1) above).  If they were resolved with NAPTR using
  99. regexps little would prevent someone from changing the format of an
  100. ISBN in various ways; there is no technical impediment to this, and if
  101. the top level ISBN naming authority doesn't want it to happen their
  102. only recourse is legal.
  103.  
  104. Second, I am curious to know how NAPTR would resolve these three name
  105. schemes.  I can see how to do ISBN (if there are -'s in it), and OIDs
  106. shouldn't be a problem, even constructed ones as long as the
  107. constructions are in the set of things regexp rules can handle.
  108. Similarly, both of these can be dealt with by my proposal, although
  109. the set of interpretable constructions is more restricted.  Since FPIs
  110. are the other space we want to handle, has anyone figured out how
  111. regexps would be used to resolve them?  From what I can tell it seems
  112. tricky.
  113.  
  114.    I certainly don't want us to do something now with NAPTRs that is going to
  115.    come back to haunt us.  [...]
  116.    1) The distinction between the "program" that is used to canonicalize
  117.       the order of any hierarchy in the URN, and the "rules" that are used
  118.       to yank things off the front and make the next domain name, needs to
  119.       be more explicit. Only the people at urn.net need to know a lot
  120.       about the program. Site administrators only need to write the rules.
  121.       Putting them both into the same RR may be confusing.
  122.  
  123. This is true.  I grafted them into the same record only to show how it
  124. fit into the original NAPTR framework.  In fact, in section A2.1 I
  125. suggest using three records.
  126.  
  127.    2) What I thought was one of the ameliorating influences in the NAPTR
  128.       proposal was that the regexps would be applied to the original URN
  129.       in its entirety. I think this is a much simpler conceptual model than
  130.       your two-part approach, especially when the second part is rules that
  131.       operate on the output of other rules.
  132.    3) One of the nasty bits about iterative rewrite rules is that upstream
  133.       changes can affect the correctness of my rules. I forsee a class of
  134.       errors arising where delimiters are not handled uniformly in upstream
  135.       rules, making life a pain in the butt for downstream administrators.
  136.       (Can you get rid of the + and - rules for handling delimiters and
  137.        just say that if a character is matched, it is eaten?)
  138.    4) While error-prone, regexps are nonetheless familiar to a large number
  139.       of people. The syntax of your proposal (which I understand you can
  140.       change) does not seem to be an improvement on regexps, and is familiar
  141.       to no-one.
  142.    5) "rules" in your model have two outputs - the domain name to be
  143.       looked up and the tail of the canonicalized string to be left for
  144.       subsequent rules. This is a bit warty, but seems unavoidable in
  145.       rules that are meant to be applied to the output of other rules.
  146.  
  147. I think that all four of these points can be addressed at the level of
  148. management software.  Because of the simplification of the rules
  149. involved, the management software is easier to specify, and with a few
  150. added features I think it can ameliorate the issues with invisible
  151. breakage downstream.
  152.  
  153. A2.  A General Framework for Management Software
  154.  
  155. A2.1 Records
  156.  
  157. The management software described here is used to create and update a
  158. set of DNS records on a given server.  There are four types of record
  159. involved here:
  160.  
  161. (1) SRV records, providing pointers to terminal servers
  162.  
  163. (2) NAPTR records, providing an order parameter and a ruleset decribing
  164. how to generate the next domain name
  165.  
  166. (3) NIDSPEC records, which provide for a given name scheme a
  167. translation program for rendering URNs canonical and an initial
  168. ruleset that generates the next domain name
  169.  
  170. (4) NADOC records, which contain documentation corresponding to a
  171. given NIDSPEC or NAPTR, as described below.
  172.  
  173. The description of this management software is very sketchy right now
  174. but you should be able to see the intent and how it might work.  I
  175. think there are some clever simplifications that can be made to the
  176. design (especially with respect to the storage and signing of
  177. ``agreements'') but I haven't thought it through enough to see them.
  178. I offer this mainly as a proof of concept, not as a final solution.
  179. To explain how this management software works, let us consider an
  180. example.
  181.  
  182. A2.2 Contracts Between Clients and Administrators
  183.  
  184. At a site below the top level, management is taking place over a
  185. collection of data that is referenced by domain name.  Suppose our
  186. site is foo.com, and they are in the business of being a ``name
  187. authority'' (or at any rate providing one step of resolution for a
  188. name authority); then xxx.foo.com retrieves data (NAPTR, NADOC, SRV
  189. records, etc.) from foo.com's name server.  The purpose of the
  190. management software is to generate foo.com's name database based on
  191. their clients' needs.
  192.  
  193. The source data contains two logical types of record:
  194.  
  195. (1) client-instance descriptors, which describe rules that have a
  196. fixed set of valid operations.  For example, a rule might apply only
  197. to two specific clients who can be listed explicitly:  the rule
  198. ``m"girod/"*p"edu.mit.lcs.skadhwe";'' would only apply to my URNs
  199. and would direct clients only to my machine.  Other rules might 
  200. apply to two or a hundred clients.
  201.  
  202. (2) client-class descriptors, which describe a rule that is applied to
  203. an unspecified set of clients.  For example, for a rule that locates a
  204. domain name in the text of the URN and appends ``.urn.net'', it might
  205. not be convenient to list all possible clients.
  206.  
  207. The format of a client-instance descriptor is as follows:
  208.  
  209. client-instance {
  210.     client agreement list = list of client-agreement
  211.     order = integer
  212.     ruleset = string  // in user-freindly form (see below)
  213. }
  214.  
  215. client-agreement {
  216.    // specification of expected input
  217.     other info about referer (parent) = (implementation specific)
  218.     domain name reference came from = string
  219.     sample expected tail of canonical URN from above = string
  220.  
  221.    // specification of promised output
  222.     other info about client = (implementation specific)
  223.     domain name of client referring to = string
  224.     tail expected by client at above domain name = string
  225. }
  226.  
  227. Client-class descriptors need not be implemented separately; they can
  228. be implemented as trivial instances of client-instance descriptors by
  229. simply listing any relevant examples.
  230.  
  231. These descriptors would be set up as a result of an agreement between
  232. the naming authority and the clients, and would be fixed.  The source
  233. data is stored in NADOC records and can be retrieved as such by the
  234. clients.  In the NADOC record the agreement (excepting the rule
  235. specification) can be signed by the agreeing parties so that the
  236. agreement used to check the rule can be verified.  The site
  237. administrator can update the rules, etc, but before the database is
  238. actually updated, the software runs a static check against the
  239. input/output specifications to make sure they work.  If so the
  240. database is modified and an end-to-end test is made.
  241.  
  242. The explicit specification of agreements provides safety against the
  243. breakage problem and the data involved can be kept in a fairly
  244. canonical form (i.e. sets of client-instance records) which should be
  245. easier to migrate to new systems.
  246.  
  247. A2.3 Canonical Data Storage for Automated Generation of Contracts
  248.  
  249. For some name schemes, it will be possible to have an even more foolproof
  250. system, one which generates the rules directly from a lexical list of 
  251. namespaces.  This is easiest in name schemes with simple syntax.  A 
  252. list of namespaces (using the model of delegation specified in section 4
  253. of our I-D, which is similar to that of the ``path'' scheme) such as
  254.  
  255.        urn:bar:foo/a/* --> a.com
  256.        urn:bar:foo/c/* --> c.com
  257.        urn:bar:foo/c/fg/* --> fg.com
  258.        urn:bar:foo/x/* --> x.com
  259.        urn:bar:foo/x/y/z/* --> z.com
  260.        urn:bar:foo/x/yz/* --> yz.com
  261.       
  262. could be used to automatically generate all of the rules and
  263. agreements involved, perhaps assuming that the tail string coming in
  264. begins right after ``urn:bar:foo/'' has been eaten (because at the
  265. previous level there was a namespace definition ``urn:bar:foo/* -->
  266. foo.com'').  The various clients involved sign the agreements, and
  267. when changes are made most of the agreements stay the same, and any
  268. that change will need to be signed again.  As a rule the agreements
  269. tend to remain pretty constant; mostly rules are added over time, not
  270. changed.
  271.  
  272. A2.4 A User Friendly Rule Syntax
  273.  
  274. Another important feature of this software should be a small rule
  275. compiler that translates an easy-to-understand language into the terse
  276. format transmitted to the browsers.  This should make it easier for
  277. people to learn and program in the ``language'' (if such a simple
  278. thing can be called a language!!) while at the same time making syntax
  279. errors less likely.  For example, we could use S-expressions (pardon
  280. my rough adherence to standard BNF form..):
  281.  
  282. <RULESET> = 
  283.     ( *<STMT> )
  284. <STMT> = 
  285.     ( eat-until <DELSET> <DISPOSITION> ) |
  286.     ( eat-including <DELSET> <DISPOSITION> ) |
  287.     ( eat-x-chars <INTEGER> <DISPOSITION> ) |
  288.     ( match-prefix <STRING> <DISPOSITION> ) |
  289.     ( match-rest <STRING> <DISPOSITION> )
  290. <DELSET> = <STRING>
  291. <DISPOSITION> = 
  292.     &replace-with <STRING> |
  293.     ©
  294.  
  295. So for example, given a canonical form email address mail:edu.mit.lcs@girod
  296.  
  297.   ((eat-including ":" &replace-with "")
  298.    (eat-until "@" ©)
  299.    (eat-including "@" &replace-with ".mail-urn"))
  300.  
  301. Would ``compile'' to ``x":"+p"";x"@"-v;x"@"+p".mail-urn";'', and would
  302. generate the pair ("mail-urn.lcs.mit.edu", "girod").  Note that the
  303. translation took care of removing the ``urn:'' if it was there.  This
  304. or something like it should be simple enough to learn.
  305.  
  306.    6) I am not so sure that your matching rules will continue to be simpler
  307.       than the major ideas in regexps. Point 3 showed one case where optionality
  308.       would be extremely helpful, so that upstream changes in matching on a
  309.       delimiter would not kill us. The religious debate on "urn:" is another.
  310.       FPIs are a namespace this group is supposed to try to accommodate. They
  311.       use :: and // in broadly equivalent ways. So, alternation is another
  312.       capability that probably needs to be in the rewriting language. If those
  313.       go into your language, you are well on the way to regexps.
  314.  
  315. At this time I have chosen to attack the upstream breakage problem
  316. differently; the URN: issue should be handled at the level of the
  317. canonical translation and won't affect the rulesets.  In section 5 of
  318. the proposal document I discuss the issues that I see surrounding
  319. ``URN:''; I think that we should make an effort to resolve this debate
  320. sometime soon.
  321.  
  322. FPIs are as yet still an unknown here, and indeed they may very well
  323. be difficult to handle.  I was hoping to figure out how to do so after
  324. seeing a general plan for doing so with rewrite rules, mainly because
  325. it seems possible to me that the NAPTR system might be used to handle
  326. some sections of that namespace while relying on other mechanisms to
  327. handle the remainder.
  328.  
  329.    Another concern that I have is the growth of the number of rewrite rules
  330.    over time as portions of collections are delegated to other agencies.
  331.    This is a concern about rewriting, and applies to either your scheme or
  332.    to regexps.
  333.  
  334. This is true, and I see this as the central reason for making sure
  335. that NAPTR can be replaced by something that will still be efficient
  336. when partial delegations become more the rule than the exception.  It
  337. is my opinion that the translation portion of this proposal will come
  338. in handy when a new system is implemented.  
  339.  
  340. A3. How Canonical Tranlsation Fits into the Future
  341.  
  342. In the future, I think canonical translation will be a very useful
  343. thing.  The main reason is that if the direction of hierarchy is
  344. consistent, information about prefixes can be cached (i.e. classes of
  345. URNs that share the same resolution information).  Without a canonical
  346. hierarchy such cache systems would need to understand the hierarchy
  347. format of any name scheme from which prefixes will be cached, and URNs
  348. for which the hierarchy is not understood could only be cached
  349. individually.  To my way of thinking the logical place to do this
  350. transform is at the client (if that is in fact possible..) so that
  351. URNs can be handled consistently within the resolution/caching
  352. mechanism until the terminal resolver is reached (which should operate
  353. on the original URN).  This is a URN framework issue.
  354.  
  355. Ignoring for the moment the question of whether name schemes should in
  356. fact be specified (see discussion in A4.1), a given translation
  357. language has a finite and _definite_ capacity to render URNs
  358. canonical.  If we make a choice and specify a language it enables a
  359. system to process a subset of possible URNs in a consistent manner.
  360. Other schemes for URNs would need to be handled by a different system,
  361. which could be implemented later with a more capable translation
  362. language encompassing a different set of URNs, and so on.  In the
  363. short term, the initial translation language would be coded into the
  364. browser, and it might be wise for browser implementations to leave
  365. room to plug new functionality into the translation language.  My
  366. guess is that a translation language capable of dealing with the
  367. existing namespaces will provide sufficient flexibility that new
  368. namespaces will have no trouble fitting into the system.
  369.  
  370.    What I would like to see is some more analysis of what capabilities
  371.    are needed (like the stuff above on why I think alternation and
  372.    optionality are needed). 
  373.  
  374. A4.  What Capabilities are Needed and Why?
  375.  
  376. As we have seen, the basic theory in terms of what is needed is that
  377. by folding stuff into the translation layer the rules layer doesn't
  378. need much functionality at all.
  379.  
  380. A4.1 Specification of Hierarchy on a Per-Name-Scheme Basis
  381.  
  382. One potential problem with this proposal is its presupposition that
  383. the hierarchy for a name scheme can be specified, which may or may not
  384. be valid (i.e. constructed OIDs.)  I think we need to establish
  385. whether this is a realistic problem.  Given that there are namespaces
  386. that cannot be rendered canonical in a single preprocessing step, can
  387. we estimate the negative impact of escaping to another mechanism at
  388. the level at which the specification no longer holds (in the case of
  389. OIDs many of them would be in canonical form already)?
  390.  
  391. One possible ameliorating factor here is that because the translation
  392. layer represents a partial specification of name scheme syntax, there
  393. may be a subsequent reduction in the bother associated with allowing
  394. new name schemes to be developed (the framework document suggested
  395. that there should be standards for admission, etc), does this then
  396. imply that names (such as constructed OIDs) that violate their
  397. ``default'' specification might instead be created in a (possibly new)
  398. name scheme for which they are structured according to spec?
  399.  
  400. I am fairly convinced that the benefit gained by the canonical
  401. hierarchy well outweighs the problems it causes.  The central
  402. benefits, which I have touched on elsewhere in this message, are
  403.  
  404. (1) Simpler rules in the NAPTR scheme
  405.  
  406. (2) Makes it easier for management software to store data canonically
  407.  
  408. (3) Makes caching easier for future systems
  409.  
  410. (4) Allows name schemes to specify a hierarchy and enables technical
  411. solutions to enforce that specification to a much greater degree
  412.  
  413. The problems are:
  414.  
  415. (1) Some existing namespaces may be incompatible and will need to
  416. escape to separate resolution technologies
  417.  
  418. (2) Some future namespaces may be incompatible or may be compelled to 
  419. maintain compatibility
  420.  
  421. The question is: how many URNs and namespaces are we talking about,
  422. and is it a problem for them to make the (possibly minor)
  423. modifications required to be compatible?
  424.  
  425. Assuming for the moment that the name schemes can be sufficiently
  426. specified, the next question is: what sorts of things will we need to
  427. handle after canonicalization and how powerful does the rule language
  428. have to be.  Ron brought up optionality and alternation as two things
  429. we will need.  In many cases this can be handled with the language
  430. currently specified.
  431.  
  432. A4.2 Support for Alternation
  433.  
  434. If we want to pull off a token delimited by either :: or // we can
  435. determine which of these cases we have using the match construct.  For
  436. example, if the following two rules are tried on "foo::bar" and
  437. "foo//bar":
  438.  
  439.     ((eat-until ":/" ©)
  440.      (match-prefix "::" &replace-with ".")
  441.      (eat-until "" ©)
  442.      (eat-x-chars 0 &replace-with ".colons"))
  443.  
  444.     ((eat-until ":/" ©)
  445.      (match-prefix "//" &replace-with ".")
  446.      (eat-until "" ©)
  447.      (eat-x-chars 0 &replace-with ".slashes"))
  448.  
  449.  
  450. the results will be ("colons.bar.foo", "") and ("slashes.bar.foo", "")
  451. respectively.  This is because the match-prefix construct fails if it
  452. doesn't match the specified string prefix exactly.  Another way of
  453. handling this would be to replace the syntactic structures "::" and
  454. "//" with special marker characters in the translation step (that way
  455. the initial string can contain a colon or slash).
  456.  
  457. In short, alternation is possible if the point of alternation can be
  458. recognised by either a set of possible characters or a pre-inserted
  459. marker.
  460.  
  461. A4.3 Support for Optionality
  462.  
  463. If we want to detect a port number in a URL if it is there (I suggest
  464. putting one in during the translation step however..), we can do
  465. something like this:
  466.  
  467.     ((eat-until ":/" ©)
  468.      (match-prefix ":" &replace-with ".tcp_port_")
  469.      (eat-until "/" ©)
  470.      (eat-including "/" &replace-with ""))
  471.  
  472.     ((eat-until ":/" ©)
  473.      (match-prefix "/" &replace-with ".tcp_port_80"))
  474.  
  475. so,
  476.     com.foo:8001/path generates ("tcp_port_8001.foo.com", "path")
  477.     com.foo/path generates ("tcp_port_80.foo.com", "path")
  478.  
  479. In short, optionality can be handled if the option can be recognised
  480. by either a set of possible characters or a pre-inserted marker.
  481.  
  482. A4.4 Other Things?
  483.  
  484. What else do we need?  I'm not sure.  I have by no means proved that
  485. this language is sufficient and don't know how I would go about doing
  486. that.  However I believe the primary reason for needing functionality
  487. here is grandfathering; barring radical new technologies (which would
  488. probably come with their own radical new resolution mechanisms), new
  489. namespaces will likely make do with what is there if it is reasonably
  490. flexible.  Consequently I am more concerned with specific
  491. counterexamples than I am with generalized ideas.  That is, we look at
  492. the names we have to deal with and try to see how they would be handled
  493. by rulesets and by regexps.  
  494.  
  495.                             I would also like to see some info on
  496.    the general problems of rewrite rules and what, if anything, we
  497.    can do to overcome them. Some of the problems with rules are:
  498.    1) Confusion on how a result was obtained, typically due to
  499.       successive applications of rules or to overly-capable rewrite
  500.       languages.
  501.    2) Accretion of rules over time making a total rats nest of delegations.
  502.       This is related to 1.
  503.  
  504. I believe how a result is obtained can be determined by tracing the
  505. lookup process, similarly to the original NAPTR process.  No doubt the
  506. trace may get confusing, and worse, long.  As the number of servers in
  507. the path grows this can get to be a real problem.  Also, the number of
  508. rulesets (or, equivalently, NAPTR regexps) returned from a given
  509. lookup may grow as delegations increase in number, meaning that more
  510. data is being transferred back to the client at a given step.  Both of
  511. these issues concern me and affect both proposals in similar ways
  512. (however, as I indicated in section 3.0, the point of this proposal is
  513. more to make it easier to migrate forward later than it is to fix the
  514. long term problems with the resolution mechanism -- it is still really
  515. NAPTR at heart.)
  516.  
  517.    3) Upstream changes invisibly breaking downstream results.
  518.    4) My site getting no requests / somebody else's requests due to
  519.       upstream errors.
  520.  
  521. As you point out, the regexp rules don't have that property of
  522. invisible breakage.  Is the mgmt software solution indicated
  523. in section 2.0 a good enough fix for the ruleset proposal?  
  524.  
  525. Also, note that the limitations on rulesets severely limit the ways in
  526. which rulesets returned from the same lookup can interfere.  It also
  527. makes it easier for mgmt software to be written to verify them.
  528.  
  529.    The point in starting this thread was to talk about rewrite rules and
  530.    if they were a flaw or a feature. At the BOF, concern was raised about
  531.    rewrite rules and someone said that if meeting the requirements
  532.    requires the power of rewrite rules, and if we don't like that
  533.    answer, do we want to change the requirements? Up to now I have not
  534.    seen any convincing arguments that the requirements can be met without
  535.    using rewriting. Nor have I seen any calls for us to change the
  536.    requirements on URNs, at least not in any fashion that restricts the
  537.    task to be accomplished. (If we were to simplify the requirements, it
  538.    would be appropriate to reconsider the abilities of NAPTRs).
  539.  
  540. I think there is a third alternative, which more accurately describes
  541. my proposal: _directly_ support all URN spaces with the exception of
  542. those for which the implementation requires a system of regexp rules.
  543. That is, balance the need to support URNs now and in the future with
  544. the relevant technical capabilities.  For example, suppose sorting out
  545. a some subset of the URNs in use required a turing-complete language
  546. while the others could all be processed using a finite automaton; if
  547. the set of URNs gained by adding this functionality (and at the same
  548. time adding the potential to loop) is relatively insignificant, the
  549. best solution may be to escape and resolve them another way.
  550.  
  551.    If we assume for the moment that rewriting is necessary, then we get
  552.    into discussing what capabilities are needed and how they will be
  553.    expressed in the language that is used for the rewrite rules. This is
  554.    where I think your proposal fits. It represents a noticeable reduction in
  555.    the capabilities of the NAPTR system, since major rewriting can only
  556.    happen at the namespace level when we canonicalize the URN. But that was
  557.    the purpose of the proposal.
  558.  
  559. True.
  560.  
  561.    I kind of like the notion of rules that eat off the front of the
  562.    canonicalized name. However, I am not sure that only allowing that
  563.    canonicalization to be performed at the namespace level is enough.
  564.    Especially as collections of resources are delegated over time, I
  565.    think we are going to see lots of URNs that are old URNs plus some
  566.    new stuff. It seems impossible to canonicalize such things with the
  567.    limited amount of information available at the namespace level.
  568.    (See the stuff on "constructed OIDs" below for more info).
  569.     [...]
  570.    I am concerned about the "program"
  571.    portion of the rewrite only being available at the namespace level.
  572.    As a specific example, I came across "constructed OIDs" the day before
  573.    yesterday. These seem to allow "other stuff" to be appended to an OID to
  574.    make a new OID that does not follow the simple rules of integer name
  575.    components. If we have an OID namespace, all it can possibly know
  576.    about constructed OIDs is where the "other stuff" starts and ends. We can't
  577.    provide a program at the namespace level that will canonicalize the
  578.    order of all components. 
  579.  
  580. This gets at what me want to mean by name scheme specification (see
  581. sections A3, A4.1).  Certainly the original specification of OIDs
  582. doesn't allow these additions?  Do you have more information about
  583. constructed OIDs?
  584.  
  585.    >* It is already clear that there are some name schemes that cannot be
  586.    >efficiently resolved by this new scheme and will need to be escaped
  587.    >(just as some cannot be conveniently handled by NAPTR).  To what
  588.    >degree is it necessary to add flexibility beyond what is required to
  589.    >grandfather in existing namespaces?
  590.  
  591.    Well, this sort of depends on what namespaces you want to grandfather in. :-)
  592.    The regexps give us a set of tools to deal with new things as they arise,
  593.    typically in the course of trying to grandfather in a new namespace.
  594.                                                          ^^^^^^^^^^^^^
  595.  
  596. By ``new namespace'' do you mean one that is recently invented or an
  597. existing namespace?  I suspect it would be more likely that new
  598. namespaces be designed to fit into whatever structure is in place,
  599. rather than go through a lot of trouble to build an alternate
  600. resolution mechanism.  It's easy to invent a namespace that can't be
  601. resolved effectively by NAPTR with regexps -- but is that our problem?
  602.  
  603.  
  604. Apologies for the length of this reply, but there were a lot of
  605. questions to answer.  Thank you for your comments on the proposal,
  606.  
  607.  
  608.     Regards,
  609.  
  610.        Lewis